home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 1146 / 1146.xpi / chrome / screengrab.jar / content / Box.js < prev    next >
Text File  |  2009-03-09  |  3KB  |  102 lines

  1. screengrab.Box = function(x, y, width, height) {
  2.     this.x = x;
  3.     this.y = y;
  4.     this.width = width;
  5.     this.height = height;
  6. }
  7. screengrab.Box.prototype = {
  8.     toString : function() {
  9.         return "(" + this.x + "," + this.y + ")[" + this.width + "," + this.height + "]";
  10.     },
  11.     intersects : function(other) {
  12.         var tw = this.width;
  13.         var th = this.height;
  14.         var rw = other.width;
  15.         var rh = other.height;
  16.         if (rw <= 0 || rh <= 0 || tw <= 0 || th <= 0) {
  17.             return false;
  18.         }
  19.         var tx = this.x;
  20.         var ty = this.y;
  21.         var rx = other.x;
  22.         var ry = other.y;
  23.         rw += rx;
  24.         rh += ry;
  25.         tw += tx;
  26.         th += ty;
  27.         return ((rw < rx || rw > tx) && (rh < ry || rh > ty) &&
  28.                    (tw < tx || tw > rx) && (th < ty || th > ry));
  29.     },
  30.     intersection: function(other) {
  31.         var tx1 = this.x;
  32.         var ty1 = this.y;
  33.         var rx1 = other.x;
  34.         var ry1 = other.y;
  35.         var tx2 = tx1; tx2 += this.width;
  36.         var ty2 = ty1; ty2 += this.height;
  37.         var rx2 = rx1; rx2 += other.width;
  38.         var ry2 = ry1; ry2 += other.height;
  39.         if (tx1 < rx1) tx1 = rx1;
  40.         if (ty1 < ry1) ty1 = ry1;
  41.         if (tx2 > rx2) tx2 = rx2;
  42.         if (ty2 > ry2) ty2 = ry2;
  43.         tx2 -= tx1;
  44.         ty2 -= ty1;
  45.         if (tx2 < 0) tx2 = 0;
  46.         if (ty2 < 0) ty2 = 0;
  47.         return new screengrab.Box(tx1, ty1, tx2, ty2);
  48.     },
  49.     copy: function() {
  50.         return new screengrab.Box(this.x, this.y, this.width, this.height);
  51.     },
  52.     contains: function(other) {
  53.         sg.debug(other);
  54.         var leftOk = this.x <= other.x;
  55.         var topOk = this.y <= other.y;
  56.         sg.debug(this.x + this.width);
  57.         sg.debug(other.x + other.width);
  58.         var rightOk = (this.x + this.width) >= (other.x + other.width);
  59.         var bottomOk = this.y + this.height >= other.y + other.height;
  60.         sg.debug(leftOk + "," + topOk + "," + rightOk + "," + bottomOk);
  61.         return leftOk && topOk && rightOk && bottomOk;
  62.     },
  63.     offsetCopy: function(x, y) {
  64.         var copy = this.copy();
  65.         copy.x += x;
  66.         copy.y += y;
  67.         return copy;
  68.     },
  69.     toBoxesSmallerThan: function(width, height) {
  70.         sg.debug("Splitting " + this + " to [" + width + "," + height + "]");
  71.         var copy = this.copy();
  72.         var boxes = this.breakWide(copy, width);
  73.         return this.breakHigh(boxes, height);
  74.     },
  75.     breakWide: function(source, width) {
  76.         var boxes = new Array();
  77.         while (source.width > width) {
  78.             var smaller = source.copy();
  79.             smaller.width = width;
  80.             source.width -= width;
  81.             source.x += width;
  82.             boxes.push(smaller);
  83.         }
  84.         boxes.push(source);
  85.         return boxes;
  86.     }, 
  87.     breakHigh: function(boxesToSplit, height) {
  88.         var resultBoxes = new Array();
  89.         boxesToSplit.forEach(function(box) {
  90.             while (box.height > height) {
  91.                 var smaller = box.copy();
  92.                 smaller.height = height;
  93.                 box.height -= height;
  94.                 box.y += height;
  95.                 resultBoxes.push(smaller);
  96.             }
  97.             resultBoxes.push(box);
  98.         });
  99.         return resultBoxes;
  100.     }
  101. }
  102.